/*
 * Copyright (c) Jack魏 2022 - 2022
 */

package com.jackwei.leetcode.t10dt20;

import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

/**
 * 编写一个函数来查找字符串数组中的最长公共前缀。
 *
 * 如果不存在公共前缀，返回空字符串 ""。
 *
 *示例 1：
 *
 * 输入：strs = ["flower","flow","flight"]
 * 输出："fl"
 * 示例 2：
 *
 * 输入：strs = ["dog","racecar","car"]
 * 输出：""
 * 解释：输入不存在公共前缀。
 *
 * 提示：
 *
 * 1 <= strs.length <= 200
 * 0 <= strs[i].length <= 200
 * strs[i] 仅由小写英文字母组成
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/longest-common-prefix
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class L0014 {
    public static void main(String[] args) {
        String[] items = {"flower","flow","floight"};
        String result = new L0014().longestCommonPrefix(items);
        System.out.println(result);
    }

    /**
     * 思路：既然只是判断前缀，那我们直接随便找一个数组中的数据（这里选用的是第一个字符串）
     * 然后从第一位开始依次判断，是不是前缀即可。
     *
     * @param strs 初始字符串
     * @return 结果
     */
    public String longestCommonPrefix(String[] strs) {
        String result = "";

        // 这里找了数组的第一位
        for (int i = 0; i < strs[0].length(); i++) {
            // 然后依次获取前缀，比如第一次是f，第二次是fl，第三次是flo。。。。。。
            String prefix = strs[0].substring(0, i + 1);
            // 标志位，如果有不满足的直接返回
            boolean flag = false;
            for (String str : strs) {
                if (!str.startsWith(prefix)) {
                    flag = true;
                }
            }

            if (flag) {
                return result;
            }else { // 都满足，就记录
                result = prefix;
            }
        }
        return result;
    }
}
